import type { 不可能, 是, 否 } from '../utils'
import type { 红色, 黑色 } from '../color'
import type { 零, 一, 二, 三, 四, 五, 六, 七, 八, 九 } from '../integer'
import type { 棋子坐标, 构造棋子坐标 } from '../position'

type 黑兵可以放在这里吗<位置> = 位置 extends 棋子坐标
  ? 位置['纵'] extends 五 | 六 | 七 | 八 | 九 // 过了河
    ? 是
    : 位置['纵'] extends 三 | 四 // 没过河
    ? 位置['横'] extends 零 | 二 | 四 | 六 | 八 // 没过河的时候只能在这些列
      ? 是
      : 否
    : 不可能
  : 不可能

type 红兵可以放在这里吗<位置> = 位置 extends 棋子坐标
  ? 位置['纵'] extends 零 | 一 | 二 | 三 | 四 // 过了河
    ? 是
    : 位置['纵'] extends 五 | 六 // 没过河
    ? 位置['横'] extends 零 | 二 | 四 | 六 | 八 // 没过河的时候只能在这些列
      ? 是
      : 否
    : 否
  : 否

export type 兵可以放在这里吗<颜色, 位置> = 颜色 extends 红色
  ? 红兵可以放在这里吗<位置>
  : 颜色 extends 黑色
  ? 黑兵可以放在这里吗<位置>
  : 不可能

/**
 * 测试代码
 */
type 黑兵00 = 兵可以放在这里吗<黑色, 构造棋子坐标<零, 零>>
type 黑兵01 = 兵可以放在这里吗<黑色, 构造棋子坐标<零, 一>>
type 黑兵02 = 兵可以放在这里吗<黑色, 构造棋子坐标<零, 二>>
type 黑兵03 = 兵可以放在这里吗<黑色, 构造棋子坐标<零, 三>>
type 黑兵04 = 兵可以放在这里吗<黑色, 构造棋子坐标<零, 四>>
type 黑兵05 = 兵可以放在这里吗<黑色, 构造棋子坐标<零, 五>>
type 黑兵06 = 兵可以放在这里吗<黑色, 构造棋子坐标<零, 六>>
type 黑兵07 = 兵可以放在这里吗<黑色, 构造棋子坐标<零, 七>>
type 黑兵08 = 兵可以放在这里吗<黑色, 构造棋子坐标<零, 八>>

type 红兵00 = 兵可以放在这里吗<红色, 构造棋子坐标<零, 一>>
type 红兵01 = 兵可以放在这里吗<红色, 构造棋子坐标<零, 二>>
type 红兵02 = 兵可以放在这里吗<红色, 构造棋子坐标<零, 三>>
